define(['jquery','underscore','mage/template','mage/smart-keyboard-handler','mage/translate','priceUtils','jquery-ui-modules/widget','jquery/jquery.parsequery','mage/validation/validation','listingProductVideo','slick'],function($,_,mageTemplate,keyboardHandler,$t,priceUtils){'use strict';$.widget('mage.CustomSwatchRenderer',{options:{classes:{attributeClass:'swatch-attribute',attributeLabelClass:'swatch-attribute-label',attributeSelectedOptionLabelClass:'swatch-attribute-selected-option',attributeOptionsWrapper:'swatch-attribute-options',attributeInput:'swatch-input',optionClass:'swatch-option',selectClass:'swatch-select',moreButton:'swatch-more',loader:'swatch-option-loading'},baseUrl:'',addToCartAction:'',mediaGallerySelector:'[data-gallery-role=gallery-placeholder]',mediaCallback:'',videoCallback:'',mediaCache:{},videoCache:{},jsonConfig:'',slickSlidesToShow:4,isInCmsBlock:false,onlyMedia:false,initSlick:true,},_init:function(){if($(this.element).attr('data-rendered')){return;} $(this.element).attr('data-rendered',true);},_create:function(){if(this.options.initSlick){this._bindCarousel();}else{var $attrOptions=$(this.element.find('.swatch-attribute-options'));$attrOptions.addClass('not-slick show-less');if($attrOptions.find('> a').length>3){$attrOptions.append('');var toggleBtn=$attrOptions.find('.toggle-show-swatches');$(toggleBtn).on('click',function(){$(this).closest('.swatch-attribute-options').toggleClass('show-less show-all')})}} this._bind();},_bind:function(){let $this=this;$this.element.find('div.swatch-option').on('click',function(event){event.preventDefault();let productId=$(this).attr('data-product-id');$(this).closest('.product-item-info').find('.loader').fadeIn(200) $this.element.find('div.swatch-option').removeClass('selected');$(this).addClass('selected');$this._setAddToCartAction(this,productId);$this._setProductLink(this,productId);$this._LoadProductVideo(productId);});},_setProductLink:function(element){let productItemInfo=$(element).parents('.product-item-info'),productLink=$(productItemInfo).find('.product-item-photo-link'),productLinkPhoto=$(productItemInfo).find('.photo.product-item-photo'),productLinkName=$(productItemInfo).find('.product-item-link');productLinkPhoto.attr('href',$(element).attr('data-product-href'));productLinkName.attr('href',$(element).attr('data-product-href'));productLink.attr('href',$(element).attr('data-product-href'));},_setAddToCartAction:function(element,productId){let form=$(element).parents('.product-item-info').find('[data-role="tocart-form"]');let productInput=form.find('[name="product"]');let uencInput=form.find('[name="uenc"]');productInput.val(productId);form.attr('action',this.options.baseUrl+this.options.addToCartAction+'/uenc/'+uencInput.val()+'/product/'+productInput.val());},_LoadProductMedia:function(productId){var $widget=this,$this=$widget.element,productData={productId:productId,isInProductView:false},mediaCallData,mediaCacheKey,mediaSuccessCallback=function(data){if(!(mediaCacheKey in $widget.options.mediaCache)){$widget.options.mediaCache[mediaCacheKey]=data;} $widget._ProductMediaCallback($this,data,productData.isInProductView);};if(!$widget.options.mediaCallback){return;} mediaCallData={'product_id':productId};mediaCacheKey=JSON.stringify(mediaCallData);if(mediaCacheKey in $widget.options.mediaCache){$widget._XhrKiller();mediaSuccessCallback($widget.options.mediaCache[mediaCacheKey]);}else{mediaCallData.isAjax=true;$widget._XhrKiller();$widget.xhr=$.ajax({url:$widget.options.mediaCallback,cache:true,type:'GET',dataType:'json',data:mediaCallData,success:mediaSuccessCallback}).done(function(){$widget._XhrKiller();});}},_LoadProductVideo:function(productId){var $widget=this,$this=$widget.element,productData={productId:productId,isInProductView:false},mediaCallData,mediaCacheKey,videoSuccessCallback=function(data){$widget.options.onlyMedia=false;if(data.length===0){$widget._LoadProductMedia(productId);return false}else{if(!(mediaCacheKey in $widget.options.videoCache)){$widget.options.videoCache[mediaCacheKey]=data;} $widget._ProductVideoCallback($this,data,productData.isInProductView,productId);}};if(!$widget.options.mediaCallback){return;} mediaCallData={'product_id':productId};mediaCacheKey=JSON.stringify(mediaCallData);if(mediaCacheKey in $widget.options.videoCache){$widget._XhrKiller();videoSuccessCallback($widget.options.videoCache[mediaCacheKey]);}else{mediaCallData.isAjax=true;$widget._XhrKiller();$widget.xhr=$.ajax({url:$widget.options.videoCallback,cache:true,type:'GET',dataType:'json',data:mediaCallData,success:videoSuccessCallback}).done(function(){});}},_ProductVideoCallback:function($this,response,isInProductView,productId){if(response){var imgContainer=$this.closest('.product-item-info').find('.product-image-container'),imgWrapper=imgContainer.find('.product-image-wrapper'),productVideoContainer=imgContainer.find('.product-video-wrapper');if(!imgWrapper.hasClass('product-video-wrapper')){if(!productVideoContainer.length){imgWrapper.clone().hide().addClass('product-video-wrapper video-'+productId).appendTo(imgContainer);} productVideoContainer=imgContainer.find('.product-video-wrapper');productVideoContainer.addClass('video-unplayed block-loading');if(!productVideoContainer.find('.product-video-close').length){$('').appendTo(productVideoContainer);}} productVideoContainer=imgContainer.find('.product-video-wrapper');productVideoContainer.addClass('video-unplayed block-loading');if($(productVideoContainer).find('.product-video').length){$(productVideoContainer).listingProductVideo('destroy');$(productVideoContainer).find('.product-video').remove();} $(productVideoContainer).listingProductVideo({"autoplayOnImageLoad":true,"videoData":response});if(productVideoContainer.length>1){let productVideoIndex=productVideoContainer[0].dataset.videoIndex;$.each(productVideoContainer,function(index,element){if((element&&element.dataset&&element.dataset.videoIndex!==undefined)&&(element.dataset.videoIndex!==productVideoIndex)){productVideoContainer.splice(index,1);}});} imgContainer.find('.product-image-wrapper').not('.product-video-wrapper').hide();productVideoContainer.show();imgContainer.find('.loader').hide();}},_ProductMediaCallback:function($this,response,isInProductView){var $main=isInProductView?$this.parents('.column.main'):$this.parents('.product-item-info'),$widget=this,images=[],support=function(e){return e.hasOwnProperty('large')&&e.hasOwnProperty('medium')&&e.hasOwnProperty('small');};if(_.size($widget)<1||!support(response)){this.updateBaseImage(this.options.mediaGalleryInitial,$main,isInProductView);return;} images.push({full:response.large,img:response.medium,thumb:response.small,isMain:true});if(response.hasOwnProperty('gallery')){$.each(response.gallery,function(){if(!support(this)||response.large===this.large){return;} images.push({full:this.large,img:this.medium,thumb:this.small});});} this.updateBaseImage(images,$main,isInProductView);var imgContainer=$this.closest('.product-item-info').find('.product-image-container');imgContainer.find('.product-video-wrapper').hide();imgContainer.find('.product-image-wrapper').not('.product-video-wrapper').show();imgContainer.find('.loader').hide();},_XhrKiller:function(){var $widget=this;if($widget.xhr!==undefined&&$widget.xhr!==null){$widget.xhr.abort();$widget.xhr=null;}},updateBaseImage:function(images,context,isInProductView){var justAnImage=images[0],initialImages=this.options.mediaGalleryInitial,imagesToUpdate,gallery=context.find(this.options.mediaGallerySelector).data('gallery'),isInitial;if(isInProductView){if(_.isUndefined(gallery)){context.find(this.options.mediaGallerySelector).on('gallery:loaded',function(){this.updateBaseImage(images,context,isInProductView);}.bind(this));return;} imagesToUpdate=images.length?this._setImageType($.extend(true,[],images)):[];isInitial=_.isEqual(imagesToUpdate,initialImages);if(this.options.gallerySwitchStrategy==='prepend'&&!isInitial){imagesToUpdate=imagesToUpdate.concat(initialImages);} imagesToUpdate=this._setImageIndex(imagesToUpdate);gallery.updateData(imagesToUpdate);this._addFotoramaVideoEvents(isInitial);}else if(justAnImage&&justAnImage.img){context.find('.product-image-photo').attr('src',justAnImage.img);}},_bindCarousel:function(){let optionsColorWrapper=$(this.element.find('.swatch-attribute-options'));if(window.preventCustomSwatchOnGridMobile){if(this.options.isInCmsBlock){this._slickCarousel(optionsColorWrapper);}}else{this._slickCarousel(optionsColorWrapper);}},_slickCarousel:function(optionsColorWrapper){if(optionsColorWrapper.length){if(optionsColorWrapper.find('.swatch-option.color').length>4&&!optionsColorWrapper.hasClass('slick-initialized')){let selectedPosition=parseInt(optionsColorWrapper.find('.swatch-option.color.selected').attr('data-position')),initialSlide=(selectedPosition+1)-this.options.slickSlidesToShow;initialSlide=initialSlide?initialSlide:0;if(initialSlide<0){initialSlide=0;} optionsColorWrapper.slick({dots:false,infinite:false,speed:300,initialSlide:initialSlide,centerMode:false,arrows:true,slidesToShow:this.options.slickSlidesToShow,slidesToScroll:1});}}}});return $.mage.CustomSwatchRenderer;});